﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Model;
using DAL;
using System.Web.SessionState;
namespace Web.App_Code
{
    public class SecurityMoudle : IHttpModule, IRequiresSessionState
    {
        public void Dispose()
        {
        }
        public void Init(HttpApplication context)
        {
            //取得请求的状态事件，一般用于获取session  在执行处理程序之前触发
            context.PostAcquireRequestState += Acquire_RequestState;

        }
        private void Acquire_RequestState(object sender, EventArgs e)
        {
            HttpApplication app = sender as HttpApplication;
            //获取当前网页路径
            string path = app.Request.Path;
            //path.ToLower()将获取的网页路径字符串转换为小写 因为有的人是Admin有的人是admin开头 统一小写 
            //.StartsWith("/admin")判断是否/admin开头，/admin开头表示要登陆后才能访问
            //因为过虑器会拦截所有的请求，包括css、js、jpg及静态html文件，这些文件是可以访问的，但只有需要动态提供数据的页面 比如提供json数据的这些路径才加以权限控制。
            if (path.ToLower().StartsWith("/admin") && path.ToLower().Contains("_json"))
            {
                //从session中获取登录时候保存的role对象
                Role role = (Role)app.Context.Session["role"];
                if (role != null && role.Authority != null && !role.Authority.Contains("ArticleAdd"))
                {
                    //没权限跳转到提示页面或首页
                    app.Response.Redirect("/Admin/Default.aspx");
                }
            }
        }

    }
}